package com.sigelcal.seguridad.dao;

import java.util.ArrayList;

import com.sigelcal.seguridad.beans.ContenidoDTO;
import com.sigelcal.seguridad.beans.ContenidoMixDTO;
import com.sigelcal.seguridad.beans.ContenidoVisibleParaDTO;
import com.sigelcal.seguridad.beans.DetalleContenidoDTO;
import com.sigelcal.seguridad.beans.GrupoDTO;
import com.sigelcal.seguridad.beans.OpcionesInfDTO;
import com.sigelcal.seguridad.beans.OpcionesMantoDTO;
import com.sigelcal.seguridad.beans.OpcionesMidDTO;
import com.sigelcal.seguridad.beans.OpcionesPrincDTO;
import com.sigelcal.seguridad.beans.OpcionesRolDTO;
import com.sigelcal.seguridad.beans.RolDTO;
import com.sigelcal.seguridad.beans.RolDocumentoDTO;
import com.sigelcal.seguridad.beans.SeccionDTO;
import com.sigelcal.seguridad.beans.UsuarioDTO;

public interface UsuarioDAO {

	
	/** Usuario **/
	public UsuarioDTO buscarPorUsuario(String NoUsuario_Usu,String CoCodigo_Sede)throws Exception;
	public UsuarioDTO listarCoodinadorCertificacion(String strCoCodigo_Sede)throws Exception;
	public ArrayList<UsuarioDTO> listarUsuariosManto(String CoCodigo_Sede)throws Exception;
	public boolean registrarUsuario(UsuarioDTO objUsuarioDTO, String strNoUser)throws Exception;
	public boolean actualizarUsuario(UsuarioDTO objUsuarioDTO, String strNoUser)throws Exception;
	public boolean eliminarUsuario(String CoCodigo_Usu, String CoCodigo_Sede, String strNoUser)throws Exception;
	public boolean activarUsuario(String CoCodigo_Usu, String CoCodigo_Sede, String strNoUser)throws Exception;
	public boolean visibilidadDocumento(UsuarioDTO objUsuarioDTO,String strCoCodigo_TipoDoc)throws Exception;
	
	public ArrayList<ContenidoMixDTO> listarContenidoPagina(int idCodigo_Cont, int idCodigo_Rol)throws Exception;
	public ArrayList<ContenidoDTO> listarContenidos()throws Exception;
	public ArrayList<OpcionesPrincDTO> listarOpcionesPrincipalesPorRol(int IdCodigo_Rol,String CoCodigo_Usu)throws Exception;
	public ArrayList<OpcionesMidDTO> listarOpcionesMedioPorOPPorRol(int IdCodigo_Rol,int IdCodigo_OP) throws Exception;
	public ArrayList<OpcionesInfDTO> listarOpcionesInferiorPorOMPorOPPorRol(int IdCodigo_Rol,int IdCodigo_OP,int IdCodigo_OM) throws Exception;
	public ArrayList<OpcionesPrincDTO> listarOPPreferidasPorRol(int IdCodigo_Rol)throws Exception;
	public ArrayList<OpcionesMantoDTO> listarOpcionesManto()throws Exception;
	
	
	/** Opciones Principales **/
	
	public boolean cambiarPreferenciaOP(String CoCodigo_Usu ,int IdCodigo_OP ,String strEstado)throws Exception;
	public boolean registrarPreferenciaOP(String CoCodigo_Usu ,int IdCodigo_OP)throws Exception;
	
	/** Seccion **/
	public ArrayList<SeccionDTO> listarSeccionesMantoPorRol(int IdCodigo_Rol) throws Exception;
	
	/**Rol**/
	public ArrayList<RolDTO>listarRol(String CoCodigo_Sede)throws Exception;
	public ArrayList<RolDTO>listarRolManto(String CoCodigo_Sede)throws Exception;
	public ArrayList<RolDTO>listarRolSinOpciones(String CoCodigo_Sede)throws Exception;
	public RolDTO listarRolPorCodigo(int IdCodigo_Rol)throws Exception;
	public ArrayList<RolDTO>listarRolPorGrupo(String CoCodigo_Sede,int IdCodigo_Grupo)throws Exception;
	public boolean registrarRol(RolDTO objRolDTO)throws Exception;
	public boolean actualizarRol(RolDTO objRolDTO)throws Exception;
	public boolean eliminarRol(int IdCodigo_Rol)throws Exception;
	public boolean activarRol(int IdCodigo_Rol)throws Exception;
	
	/** Opciones Rol **/
	public ArrayList<OpcionesRolDTO> listarOpcionesRol()throws Exception;
	public ArrayList<OpcionesRolDTO> listarOpcionesRolPorRol(int IdCodigo_Rol, String CoCodigo_Sede)throws Exception;
	public boolean registrarOpcionesRol(OpcionesRolDTO objOpcionesRolDTO) throws Exception;
	public boolean quitarOpcionesRol(OpcionesRolDTO objOpcionesRolDTO) throws Exception;
	public boolean actualizarOpcionesRol(OpcionesRolDTO objOpcionesRolDTO) throws Exception;
	public boolean eliminarOpcionesRol(int IdCodigo_OPR)throws Exception;
	public boolean activarOpcionesRol(int IdCodigo_OPR)throws Exception;
	public OpcionesRolDTO listarOpcionesRolPorCodigo(int IdCodigo_OPR) throws Exception;
	
	public ArrayList<OpcionesPrincDTO> listarOpcionesPrincipales() throws Exception;
	public ArrayList<OpcionesMidDTO> listarOpcionesMedioPorOP(int IdCodigo_OP)throws Exception;
	public ArrayList<OpcionesInfDTO> listarOpcionesInferiorPorOPPorOM(int IdCodigo_OP,int IdCodigo_OM)throws Exception;

	/**Grupo**/
	public ArrayList<GrupoDTO> listarGrupo(String CoCodigo_Sede) throws Exception;
	public GrupoDTO listarGrupoPorCodigo(int IdCodigo_Grupo)throws Exception;
	public boolean registrarGrupo(GrupoDTO objGrupoDTO)throws Exception;
	public boolean actualizarGrupo(GrupoDTO objGrupoDTO)throws Exception;
	
	/**Usuario**/
	public ArrayList<UsuarioDTO> listarUsuarioPorDescripcion(String strNoUsurio_Usu, String strCoCodigo_Sede)throws Exception;
	public UsuarioDTO obtenerJefeLabPorIR(String strCoCodigo_Sede, String strCoCodigo_IR)throws Exception;
	
	/**Contenido visible para**/
	public ArrayList<ContenidoVisibleParaDTO> listarContenidoVisiblePara() throws Exception;
	public ArrayList<DetalleContenidoDTO> listarContenidoVisibleParaPorRol(int IdCodigo_Rol) throws Exception;
	public boolean registrarContenidoVisiblePara(ContenidoVisibleParaDTO objContenidoVisibleParaDTO )throws Exception;
	public boolean actualizarContenidoVisiblePara(ContenidoVisibleParaDTO objContenidoVisibleParaDTO )throws Exception;
	public boolean eliminarContenidoVisiblePara(int intIdCodigo_Visi)throws Exception;
	public boolean eliminarContenidoVisiblePara(ContenidoVisibleParaDTO objContenidoVisibleParaDTO)throws Exception;
	public boolean activarContenidoVisiblePara(int intIdCodigo_Visi)throws Exception;
	public ContenidoVisibleParaDTO listarContenidoVisibleParaPorCodigo(int IdCodigo_Visi)throws Exception;
	
	public ArrayList<ContenidoDTO> listarContenidoManto()throws Exception;
	public ArrayList<DetalleContenidoDTO> listarDetalleContenidoPorContenido(int IdCodigo_Cont)throws Exception;
	
	/** Rol Documento **/
	public ArrayList<RolDocumentoDTO> listarDocumentoPermitidosPorRol(int intIdCodigo_Rol)throws Exception;
	public ArrayList<RolDocumentoDTO> listarRolDocumentoManto(String strCoCodigo_Sede)throws Exception;
	public RolDocumentoDTO listarRolDocumentoPorCodigo(int intIdCodigo_RolDoc)throws Exception;
	public RolDocumentoDTO listarRolDocumentoPorRolDocumento(int intIdCodigo_Rol, String strCoCodigo_TipoDoc)throws Exception;
	public boolean activarRolDocumento(int intIdCodigo_RolDoc,String strNoUser)throws Exception;
	public boolean eliminarRolDocumento(int intIdCodigo_RolDoc,String strNoUser)throws Exception;
	public boolean registrarRolDocumento(RolDocumentoDTO objRolDocumentoDTO, String strNoUser)throws Exception;
	
	/** Licencia **/
	public boolean verificaPeriodoLicencia(String strFechaActual,String strCantDias)throws Exception;
	public String listarFechaActualLicencia()throws Exception;
	public boolean actualizarFechaLicencia(String strFechaActual,String strCantDias)throws Exception;
	
	/** Lista de usuarios sin asignar por descripcion **/
	public ArrayList<UsuarioDTO> listarUsuariosSinAsignarPorDescripcion(String strNoUsurio_Usu, String strCoCodigo_Sede)throws Exception;
	public ArrayList<UsuarioDTO> listarUsuariosDisponibles(String strCoCodigo_Sede)throws Exception;
	public abstract boolean cambiarClaveUsuario(String strCoCodigo_Usu,String strCoCodigo_Sede, String strNoClaveNueva, String strNoUsuario_Usu)throws Exception;
}
